#include "lectordocumento.h"

LectorDocumento::LectorDocumento(FragmentoImpresion* documento)
{
    this->documento = documento;
    indiceElementoActualDocumento = 0;
}

LectorDocumento::~LectorDocumento()
{
    limpiar();
}

void LectorDocumento::limpiar()
{
    foreach(ElementoImpresion* elemento, listaElementosDevueltos) {
        if (elemento->elementoDividido()) {
            delete elemento;
        }
    }
    listaElementosDevueltos.clear();
    indiceElementoActualDocumento = 0;
}

void LectorDocumento::devolverElemento(ElementoImpresion* elemento)
{
    listaElementosDevueltos.prepend(elemento);
}

ElementoImpresion* LectorDocumento::obtenerSiguienteElemento()
{
    if (!listaElementosDevueltos.isEmpty()) {
        return listaElementosDevueltos.takeFirst();
    }

    if (!quedanElementosEnDocumento()) {
        return NULL;
    }

    return documento->getElemento(indiceElementoActualDocumento++);    
}

bool LectorDocumento::quedanElementos()
{
    bool quedan = quedanElementosDevueltos() || quedanElementosEnDocumento();
    return quedan;
}

bool LectorDocumento::quedanElementosDevueltos()
{
    return !listaElementosDevueltos.isEmpty();
}

bool LectorDocumento::quedanElementosEnDocumento()
{
    return indiceElementoActualDocumento >= 0 && indiceElementoActualDocumento < documento->obtenerNumeroElementos();
}